<?php
// TODO 模型层（model）

namespace app\common\model\User;

use think\Model;
use traits\model\SoftDelete;

// TODO 文件夹改成大写User
class User extends Model
{
    // todo 设置数据表 => 用户表
    protected $table = 'pre_user';
    protected $autoWriteTimestamp  = true;

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = false;

    // TODO 因为在获取时间戳的时候，tp5底层自动将时间戳转成Y-m-d H:m:s格式，不需要H:m:s，就追加一个新的字段
    protected $dateFormat = "Y-m-d";

    // TODO 开启软删除
    use SoftDelete;
    protected $deleteTime = 'deletetime';

    // 追加字段
    protected $append = [
        'sex_text',
        'avatar_cdn',
        'cover_cdn',
        'avatar_text',
        'cover_text',
        'region_text'
    ];

    // TODO 设置不存在字段
    public function getSexTextAttr($value, $data)
    {
        $SexList = [
            0 => '保密',
            1 => '男',
            2 => '女'
        ];

        return $SexList[$data['sex']];
    }
    public function getAuthTextAttr($value, $data)
    {
        $AuthList = [
            0 => '未认证',
            1 => '已认证',
        ];

        return $AuthList[$data['auth']];
    }
    // TODO 头像
    public function getAvatarCdnAttr($value, $data)
    {
        $avatar = @is_file('.' . $data['avatar']) ? $data['avatar'] : '/static/home/res/images/avatar/default.png';

        // 获取App目录下的config文件下的cdn字段
        $cdn = config('cdn');

        return $cdn . $avatar;
    }

    public function getAvatarTextAttr($value, $data)
    {
        $avatar = @is_file('.' . $data['avatar']) ? $data['avatar'] : '/static/home/res/images/avatar/default.png';

        $cdn = config('cdn');

        return $cdn . $avatar;
    }

    // TODO 背景
    public function getCoverCdnAttr($value, $data)
    {
        $cover = @is_file('.' . $data['cover']) ? $data['cover'] : '/static/home/res/images/bg.png';

        $cdn = config('cdn');

        return  $cdn . $cover;
    }

    public function getCoverTextAttr($value, $data)
    {
        $cover = @is_file('.' . $data['cover']) ? $data['cover'] : '/static/home/res/images/bg.png';

        $cdn = config('cdn');

        return $cdn . $cover;
    }

    public function getProAttr($value, $data)
    {
        $pro = $data['province'] ? $this->provinces['name'] . '-' . $this->citys['name'] . '-' . $this->districts['name'] : '保密';

        return $pro;
    }

    // TODO 所在地
    public function getRegionTextAttr($value, $data)
    {
        $ReogionList = [];

        if (!empty($data['province'])) {
            $ReogionList[] = model('Region')->where(['code' => $data['province']])->value('name');
        }

        if (!empty($data['city'])) {
            $ReogionList[] = model('Region')->where(['code' => $data['city']])->value('name');
        }

        if (!empty($data['district'])) {
            $ReogionList[] = model('Region')->where(['code' => $data['district']])->value('name');
        }

        return implode('-', $ReogionList);
    }

    // TODO 关联查询（连表）
    public function provinces()
    {
        /**
         * @param belongsTo 相对
         * @param 第一个参数 模型名
         * @param 第二个参数 关联外键
         * @param 第三个参数 关联主键
         * @param 第四个参数 模型别名
         * @param 第五个参数 链表方法（JOIN）
         */
        return $this->belongsTo('app\common\model\Region', 'province', 'code', [], 'LEFT')->setEagerlyType(0);
    }
    // TODO 关联查询（连表）
    public function citys()
    {
        return $this->belongsTo('app\common\model\Region', 'city', 'code', [], 'LEFT')->setEagerlyType(0);
    }
    // TODO 关联查询（连表）
    public function districts()
    {
        return $this->belongsTo('app\common\model\Region', 'district', 'code', [], 'LEFT')->setEagerlyType(0);
    }
}
